package com.iocoder.yudao.module.erp.service.stock;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import com.iocoder.yudao.module.erp.controller.admin.stock.vo.stock.ErpProductStockPageVo;
import com.iocoder.yudao.module.erp.controller.admin.stock.vo.stock.ErpProductStockReposeVo;
import com.iocoder.yudao.module.erp.model.stock.ErpStockDO;

import javax.validation.Valid;
import java.math.BigDecimal;

public interface ErpProductStockService {


    /**
     * 分页查询库存信息
     *
     * @param pageReqVO
     * @return {@link PageResult }<{@link ErpProductStockReposeVo }>
     */
    PageResult<ErpStockDO> getProductStockPage(@Valid ErpProductStockPageVo pageReqVO);

    /**
     * 获得产品库存
     *
     * @param id 编号
     * @return 库存
     */
    ErpStockDO getStock(Long id);

    /**
     * 基于产品 + 仓库，获得产品库存
     *
     * @param productId 产品编号
     * @param warehouseId 仓库编号
     * @return 产品库存
     */
    ErpStockDO getStock(Long productId, Long warehouseId);

    /**
     * 获得产品库存数量
     *
     * 如果不存在库存记录，则返回 0
     *
     * @param productId 产品编号
     * @return 产品库存数量
     */
    BigDecimal getStockCount(Long productId);

    /**
     * 获得产品库存分页
     *
     * @param pageReqVO 分页查询
     * @return 库存分页
     */
    PageResult<ErpStockDO> getStockPage(@Valid ErpProductStockPageVo pageReqVO);
}
